BibliotecaAuxiliarScript.execute('framework.src.gui.Component');

Panel = Component.new();

Panel.id = 'Panel';
Panel.img = nil;
Panel.collection_component = nil;
Panel.is_altura_alterada = false;
Panel.is_largura_alterada = false;

function Panel.__index(tabela,chave)
	return Panel[chave];
end

function Panel.new(o)
	local retorno = o or {};
	retorno = setmetatable(retorno,Panel);
	retorno.collection_component = {};
	retorno.is_foco_visible = false;
	return retorno;
end

function Panel:addComponent(component)
	component:atualizar();
	table.insert(self.collection_component,component);
end

function Panel:draw()
	
	if(self.is_largura_alterada or self.is_altura_alterada)then
		self:atualizar();
	end
	
	local fundo = nil;
	
	if(self.is_foco and self.is_foco_visible) then
		foco = BibliotecaAuxiliarDesenho.newImagem(self.nb_largura,self.nb_altura);
		BibliotecaAuxiliarDesenho.limparTela(foco,Cor.new({r=0,g=255,b=0}));
		fundo_foco = BibliotecaAuxiliarDesenho.newImagem(self.nb_largura-(self.nb_margem_esquerda+self.nb_margem_direita),self.nb_altura-(self.nb_margem_inferior+self.nb_margem_superior));
		BibliotecaAuxiliarDesenho.limparTela(fundo_foco,self.cor_fundo);
		BibliotecaAuxiliarDesenho.desenharImagem(0+self.nb_margem_esquerda,0+self.nb_margem_superior,fundo_foco,foco);
		
		fundo = foco;
	else
		BibliotecaAuxiliarDesenho.limparTela(self.img,self.cor_fundo);
		fundo = self.img;
	end		
	
	
	for i,v in pairs(self.collection_component) do
		if(v.is_visible ~= nil and v.is_visible == true)then
			BibliotecaAuxiliarDesenho.desenharImagem(v.nb_px,v.nb_py,v:draw(),fundo);	
		end
	end
	
	return fundo;
end

function Panel:handler(evt)
	for i,v in pairs(self.collection_component) do
		if(v.is_foco ~= nil and v.is_foco == true)then
			if(v.handler ~= nil)then
				v:handler(evt);
			end
		end
	end
end



function Panel:atualizar()
	self.img = BibliotecaAuxiliarDesenho.newImagem(self.nb_largura,self.nb_altura)

	self.is_largura_alterada = false;
	self.is_altura_alterada = false;
end

function Panel:setAltura(nb_alt)
	self.nb_altura = nb_alt;
	self.is_altura_alterada = true;
end

function Panel:setLargura(nb_lar)
	self.nb_largura = nb_lar;
	self.is_largura_alterada = true;
end